// using UnityEngine;
// using GGameFramework.Core.FSM;
//
// namespace GGameFramework.Examples.FSM
// {
//     /// <summary>
//     /// 玩家受伤状态
//     /// </summary>
//     public class PlayerHurtState : FsmState<PlayerController>
//     {
//         private const string KEY_HEALTH = "Health";
//         
//         private float m_HurtStartTime;
//         private float m_HurtDuration = 0.5f; // 受伤无敌时间
//         private bool m_HurtEffectPlayed = false;
//         private Color m_OriginalColor;
//         private Renderer m_PlayerRenderer;
//
//         protected internal override void OnInit(IFsm<PlayerController> fsm)
//         {
//             Debug.Log("受伤状态初始化");
//         }
//         
//         protected internal override void OnEnter(IFsm<PlayerController> fsm)
//         {
//             PlayerController player = fsm.Owner;
//             m_HurtStartTime = 0f;
//             m_HurtEffectPlayed = false;
//             
//             // 设置受伤动画
//             if (player.GetAnimator() != null)
//             {
//                 player.GetAnimator().SetBool("IsHurt", true);
//                 player.GetAnimator().SetBool("IsMoving", false);
//                 player.GetAnimator().SetBool("IsJumping", false);
//                 player.GetAnimator().SetBool("IsAttacking", false);
//                 player.GetAnimator().SetTrigger("HurtStart");
//             }
//             
//             // 播放受伤音效
//             // player.PlaySound(hurtSound);
//             
//             // 设置受伤视觉效果
//             SetupHurtVisualEffect(player);
//             
//             // 播放受伤粒子效果
//             // PlayHurtParticles(player.transform.position);
//             
//             // 屏幕震动效果
//             // CameraShake.Instance.Shake(0.2f, 0.3f);
//             
//             Debug.Log("进入受伤状态");
//         }
//         
//         protected internal override void OnUpdate(IFsm<PlayerController> fsm, float elapseSeconds, float realElapseSeconds)
//         {
//             PlayerController player = fsm.Owner;
//             m_HurtStartTime += elapseSeconds;
//             
//             // 更新受伤视觉效果
//             UpdateHurtVisualEffect(player, elapseSeconds);
//             
//             // 受伤状态持续时间结束
//             if (m_HurtStartTime >= m_HurtDuration)
//             {
//                 // 检查生命值状态
//                 int currentHealth = fsm.GetData<IntVariable>(KEY_HEALTH)?.Value ?? 100;
//                 
//                 if (currentHealth <= 0)
//                 {
//                     // 死亡
//                     ChangeState<PlayerDeathState>(fsm);
//                     return;
//                 }
//                 else
//                 {
//                     // 恢复，回到空闲状态
//                     ChangeState<PlayerIdleState>(fsm);
//                     return;
//                 }
//             }
//         }
//         
//         protected internal override void OnLeave(IFsm<PlayerController> fsm, bool isShutdown)
//         {
//             PlayerController player = fsm.Owner;
//             
//             // 停止受伤动画
//             if (player.GetAnimator() != null)
//             {
//                 player.GetAnimator().SetBool("IsHurt", false);
//             }
//             
//             // 恢复视觉效果
//             RestoreVisualEffect(player);
//             
//             Debug.Log("离开受伤状态");
//         }
//         
//         protected internal override void OnDestroy(IFsm<PlayerController> fsm)
//         {
//             Debug.Log("受伤状态销毁");
//         }
//         
//         /// <summary>
//         /// 设置受伤视觉效果
//         /// </summary>
//         private void SetupHurtVisualEffect(PlayerController player)
//         {
//             // 获取渲染器组件
//             m_PlayerRenderer = player.GetComponent<Renderer>();
//             if (m_PlayerRenderer != null)
//             {
//                 // 保存原始颜色
//                 m_OriginalColor = m_PlayerRenderer.material.color;
//                 
//                 // 设置受伤颜色（红色闪烁）
//                 m_PlayerRenderer.material.color = Color.red;
//             }
//             
//             // 设置受伤时的其他视觉效果
//             // 例如：启用受伤材质、播放受伤特效等
//         }
//         
//         /// <summary>
//         /// 更新受伤视觉效果
//         /// </summary>
//         private void UpdateHurtVisualEffect(PlayerController player, float deltaTime)
//         {
//             if (m_PlayerRenderer != null)
//             {
//                 // 创建闪烁效果
//                 float flashSpeed = 10f;
//                 float alpha = Mathf.Sin(Time.time * flashSpeed) * 0.5f + 0.5f;
//                 
//                 Color hurtColor = Color.red;
//                 hurtColor.a = alpha;
//                 m_PlayerRenderer.material.color = hurtColor;
//             }
//         }
//         
//         /// <summary>
//         /// 恢复视觉效果
//         /// </summary>
//         private void RestoreVisualEffect(PlayerController player)
//         {
//             if (m_PlayerRenderer != null)
//             {
//                 // 恢复原始颜色
//                 m_PlayerRenderer.material.color = m_OriginalColor;
//             }
//             
//             // 恢复其他视觉效果
//         }
//         
//         public override string GetStateName()
//         {
//             return "受伤状态";
//         }
//         
//         public override bool CanTransitionTo<TState>(IFsm<PlayerController> fsm)
//         {
//             // 受伤状态只能转换到空闲状态或死亡状态
//             if (typeof(TState) == typeof(PlayerIdleState) || 
//                 typeof(TState) == typeof(PlayerDeathState))
//             {
//                 return true;
//             }
//             return false;
//         }
//     }
// }
